Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

30장. Route 53 — AWS의 DNS

이 장에서 말하고자 하는 것

앞 장에서 우리는 DNS의 개념을 배웠다.

  • 이름을 IP로 바꿔준다
  • 계층 구조로 동작한다
  • TTL과 캐시가 있다

이제 AWS에서 그 DNS를 직접 운영하는 도구를 본다.

Route 53

이다.

Route 53은 단순한 DNS 호스팅을 넘어
헬스 체크 · 트래픽 라우팅 · 도메인 등록까지
한 곳에서 다루도록 만들어졌다.


1. Route 53은 무엇인가

Route 53은 AWS의 관리형 DNS 서비스다.

  • 권한 있는 네임서버 역할을 한다
  • 가용성이 매우 높게 설계되어 있다
  • 도메인 등록도 제공한다 (선택)
  • AWS 리소스를 직접 가리키는 ALIAS 레코드를 제공한다

다른 DNS 서비스와 가장 큰 차이는

AWS 안의 리소스와 강하게 연동된다

는 점이다.


2. Hosted Zone — 도메인 단위 관리 구획

Route 53에서 도메인 하나를 관리하려면
먼저 Hosted Zone 을 만든다.

example.com → Hosted Zone 1
shop.com    → Hosted Zone 2

Hosted Zone 안에 그 도메인의 모든 레코드가 들어간다.

example.com (Hosted Zone)
 ├─ A      → 1.2.3.4
 ├─ MX     → mail.example.com
 ├─ NS     → ns-xxx.awsdns-xx.com
 └─ api    → 13.124.55.21

Hosted Zone을 만들면 AWS가
자동으로 NS 레코드 4개를 발급한다.

이 4개를 도메인 등록자에 등록하면
그 시점부터 Route 53이 그 도메인의 응답을 책임진다.


3. 레코드 만들기

기본 레코드 추가는 단순하다.

이름:   api.example.com
타입:   A
값:     13.124.55.21
TTL:    60

이 정보가 곧 DNS 응답이 된다.

dig api.example.com
# → 13.124.55.21

4. ALIAS — AWS 리소스를 직접 가리키는 특별 레코드

운영에서 가장 많이 쓰는 게 ALIAS 레코드다.

CloudFront, ALB, S3, API Gateway 같은 AWS 리소스는
실제 IP 주소가 자주 바뀐다.

A 레코드에 IP를 박아두면 그 IP가 사라질 때 장애가 난다.

대신 ALIAS를 쓰면

api.example.com (A · ALIAS) → my-alb-1234.elb.amazonaws.com

Route 53이 ALB의 현재 IP를 매번 자동으로 응답한다.

ALIAS는 CNAME처럼 보이지만 A 레코드처럼 동작한다

또 두 가지가 더 좋다.

  • 도메인 최상위(apex)에도 쓸 수 있다 (CNAME은 불가)
  • ALIAS 자체에 추가 요금이 없다

운영에서는 사실상

CloudFront / ALB / API Gateway는 ALIAS로 가리킨다

가 기본이다.


5. 라우팅 정책 — 같은 이름에 여러 답을 주기

Route 53은 단순한 “이름 → IP” 만 하지 않는다.

같은 이름에 대해 여러 라우팅 정책 을 선택할 수 있다.

정책동작
Simple그냥 하나의 답
Weighted비율에 따라 분산 (예: 90% / 10%)
Latency가장 가까운 리전으로 보냄
Geolocation사용자의 지역에 따라 다른 답
Failover정상 리소스로 자동 전환
Multi-Value Answer여러 IP를 헬스 체크와 함께 응답

운영에서 가장 많이 쓰는 두 가지는

  • Failover — 운영/백업 구조
  • Latency — 글로벌 서비스에서 지역 라우팅

이다.


6. 헬스 체크 — 죽은 곳으로 보내지 않기

Failover 라우팅을 쓰려면 헬스 체크 가 필요하다.

[헬스 체크] 30초마다 https://api.example.com/health 확인
  ↓
정상 → Primary 응답
이상 → Secondary 응답

헬스 체크는 Route 53이 전 세계 여러 지점에서
실제 요청을 보내 확인한다.


7. 우리 서비스에서 Route 53은 어디에 있나

척추 그림에서 가장 첫 점이다.

[사용자]
    ↓ DNS 질의
[Route 53]   ← 우리가 만들 곳
    ↓ ALIAS 응답
[CloudFront]
    ↓
[API Gateway]
    ↓
[ALB]
    ↓
[ECS]

Route 53은 사용자가 우리 인프라로 들어오는
가장 첫 관문이다.

여기를 잘못 설정하면 뒤쪽이 멀쩡해도
사용자는 도달하지 못한다.


8. 직접 확인해보기 — CLI

Hosted Zone 만들기

aws route53 create-hosted-zone \
  --name example.com \
  --caller-reference $(date +%s)

레코드 추가

aws route53 change-resource-record-sets \
  --hosted-zone-id Z123ABC \
  --change-batch file://record.json

Hosted Zone에 등록된 레코드 보기

aws route53 list-resource-record-sets \
  --hosted-zone-id Z123ABC

9. 코드로는 이렇게 생겼다 — Terraform

resource "aws_route53_zone" "main" {
  name = "example.com"
}

# ALB를 가리키는 ALIAS 레코드
resource "aws_route53_record" "api" {
  zone_id = aws_route53_zone.main.zone_id
  name    = "api.example.com"
  type    = "A"

  alias {
    name                   = aws_lb.main.dns_name
    zone_id                = aws_lb.main.zone_id
    evaluate_target_health = true
  }
}

ALIAS 레코드는 일반 A 레코드와 달리
records 가 아닌 alias 블록을 쓴다는 점만 기억하면 된다.


10. 이렇게 쓰면 망한다 — 안티패턴

안티패턴 1. ALB / CloudFront 주소를 IP로 박는다

api.example.com  A  13.250.55.21  ← ALB의 현재 IP

ALB는 IP가 바뀐다. 며칠 ~ 몇 주 뒤 장애 난다.

AWS 리소스를 가리킬 때는 반드시 ALIAS를 쓴다

안티패턴 2. 도메인을 산 곳의 DNS를 그대로 쓴다

도메인은 가비아
DNS도 가비아 (기본값)

가비아 DNS에는 ALIAS가 없다.
헬스 체크도, Failover도 못 쓴다.

운영 서비스라면 NS를 Route 53으로 위임한다

안티패턴 3. 핵심 레코드 TTL을 86400(하루)으로 둔다

장애 대응이 하루 늦는다.
운영 트래픽이 받는 레코드는 60~300으로 시작한다.

안티패턴 4. Failover만 설정하고 헬스 체크는 안 만든다

이러면 전환이 일어나지 않는다.
Route 53은 헬스 체크 결과로만 Primary/Secondary를 바꾼다.


11. 한 줄로 정리

Route 53은 AWS 안의 리소스와 단단히 묶이는 관리형 DNS이며
우리 인프라의 첫 관문이다


12. 이 장의 핵심 정리

  1. Route 53은 AWS의 관리형 DNS 서비스다.
  2. 도메인 단위로 Hosted Zone을 만든다.
  3. ALIAS는 AWS 리소스를 가리킬 때 항상 우선한다.
  4. 라우팅 정책으로 같은 이름에 다양한 동작을 줄 수 있다.
  5. Failover에는 반드시 헬스 체크가 함께 있어야 한다.
  6. 핵심 레코드의 TTL은 짧게 시작해 운영 데이터로 조정한다.